//package com.hyzh.latte.demo.task;
//
//import cn.hutool.core.util.ObjectUtil;
//import com.hyzh.latte.demo.consts.GateCommonEnums;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//import java.util.Random;
//
///**
// * @Author: WangLong
// * @Description: 定时任务生成数据
// * @CreateTime: 2024-04-08 16:25
// */
//@Component
//public class ProductionDataTask {
//
//    @Autowired
//    private RedisTemplate<String, Object> redisTemplate;
//
//    public static final String APPOINTMENT_REDIS_KEY = "appointment:";
//    public static final String ACCESS_REDIS_KEY = "access:";
//    public static final String WARNING_REDIS_KEY = "warning:";
//
//    /**
//     * @description: 定时任务生成预约数据
//     * @author: WangLong
//     * @date: 2024/4/8 16:27
//     */
//    @Scheduled(fixedDelay = 60000)
//    public void ProductionAppointmentData(){
//        if (new Random().nextInt(5) != 1){
//            return;
//        }
//        Integer unapproved = null;//未审批
//        Integer consent = null;//通过
//        Integer refuse = null;//拒绝
//        Integer total = null;//总数
//
//        ValueOperations<String, Object> valueOperations = getValueOperations();
//        // 获取当前各类型数量
//        for (GateCommonEnums.CheckStatus value : GateCommonEnums.CheckStatus.values()) {
//            Object amount = valueOperations.get(APPOINTMENT_REDIS_KEY + value);
//            if (ObjectUtil.isNull(amount)){
//                valueOperations.set(APPOINTMENT_REDIS_KEY + value, 0);
//                if (value.getCode().equals(0)){//未审批
//                    unapproved = 0;
//                }else if (value.getCode().equals(1)){//通过
//                    consent = 0;
//                }else {//拒绝
//                    refuse = 0;
//                }
//            }else {
//                String amountStr = amount.toString();
//                if (value.getCode().equals(0)){//未审批
//                    unapproved = Integer.valueOf(amountStr);
//                }else if (value.getCode().equals(1)){//通过
//                    consent = Integer.valueOf(amountStr);
//                }else {//拒绝
//                    refuse = Integer.valueOf(amountStr);
//                }
//            }
//        }
//        //预约申请总数
//        total = unapproved+consent+refuse;
//
//
//        if (total >= 10 && 1 == new Random().nextInt(2) + 1 && unapproved <= 20){
//            valueOperations.increment(APPOINTMENT_REDIS_KEY + GateCommonEnums.CheckStatus.UNAPPROVED);
//            return;
//        }else {
//            if (unapproved > 2){
//                valueOperations.increment(APPOINTMENT_REDIS_KEY + GateCommonEnums.CheckStatus.UNAPPROVED, -1);
//            }
//        }
//
//        if (consent > 10 && consent / 3 >= refuse && 1 == new Random().nextInt(4)){//加拒绝
//            valueOperations.increment(APPOINTMENT_REDIS_KEY + GateCommonEnums.CheckStatus.REFUSE);
//        }else {//加通过
//            valueOperations.increment(APPOINTMENT_REDIS_KEY + GateCommonEnums.CheckStatus.CONSENT);
//        }
//    }
//
//    /**
//     * @description: 定时任务生成出入园数据
//     * @author: WangLong
//     * @date: 2024/4/8 16:27
//     */
//    @Scheduled(fixedDelay = 60000)
//    public void ProductionAccessData(){
//        if (new Random().nextInt(2) != 1){
//            return;
//        }
//        Integer inPersonnel = null;//入园人数
//        Integer inOrdinaryVehicle = null;//入园普通车辆
//        Integer inHazardousChemicalVehicles = null;//入园危化车辆
//
//
//        Integer outPersonnel = null;//出园人数
//        Integer outOrdinaryVehicle = null;//出园普通车辆
//        Integer outHazardousChemicalVehicles = null;//出园危化车辆
//
//        ValueOperations<String, Object> valueOperations = getValueOperations();
//        // 获取当前各类型入园数量
//        for (GateCommonEnums.InRecord value : GateCommonEnums.InRecord.values()) {
//            Object amount = valueOperations.get(ACCESS_REDIS_KEY + value);
//            if (ObjectUtil.isNull(amount)){
//                valueOperations.set(ACCESS_REDIS_KEY + value, 0);
//                if (value.getCode().equals(1)){//人员
//                    inPersonnel = 0;
//                }else if (value.getCode().equals(2)){//普通车辆
//                    inOrdinaryVehicle = 0;
//                }else {//危化车
//                    inHazardousChemicalVehicles = 0;
//                }
//            }else {
//                String amountStr = amount.toString();
//                if (value.getCode().equals(1)){//人员
//                    inPersonnel = Integer.valueOf(amountStr);
//                }else if (value.getCode().equals(2)){//普通车辆
//                    inOrdinaryVehicle = Integer.valueOf(amountStr);
//                }else {//危化车辆
//                    inHazardousChemicalVehicles = Integer.valueOf(amountStr);
//                }
//            }
//        }
//
//        // 获取当前各类型出园数量
//        for (GateCommonEnums.OutRecord value : GateCommonEnums.OutRecord.values()) {
//            Object amount = valueOperations.get(ACCESS_REDIS_KEY + value);
//            if (ObjectUtil.isNull(amount)){
//                valueOperations.set(ACCESS_REDIS_KEY + value, 0);
//                if (value.getCode().equals(1)){//人员
//                    outPersonnel = 0;
//                }else if (value.getCode().equals(2)){//普通车辆
//                    outOrdinaryVehicle = 0;
//                }else {//危化车
//                    outHazardousChemicalVehicles = 0;
//                }
//            }else {
//                String amountStr = amount.toString();
//                if (value.getCode().equals(1)){//人员
//                    outPersonnel = Integer.valueOf(amountStr);
//                }else if (value.getCode().equals(2)){//普通车辆
//                    outOrdinaryVehicle = Integer.valueOf(amountStr);
//                }else {//危化车辆
//                    outHazardousChemicalVehicles = Integer.valueOf(amountStr);
//                }
//            }
//        }
//
//        int randomNumberOne = new Random().nextInt(100);
//        // 入园
//        if (randomNumberOne >= 30){
//            valueOperations.increment(ACCESS_REDIS_KEY + GateCommonEnums.InRecord.IN_ORDINARY_VEHICLE);
//            inOrdinaryVehicle++;
//        }
//        if (inOrdinaryVehicle + inHazardousChemicalVehicles / 4 >= inPersonnel && randomNumberOne >= 75){//增加入园人数
//            if (randomNumberOne >= 80){
//                valueOperations.increment(ACCESS_REDIS_KEY + GateCommonEnums.InRecord.IN_PERSONNEL);
//                inPersonnel++;
//            }
//            if (randomNumberOne >= 85){//增加入园危化车辆
//                valueOperations.increment(ACCESS_REDIS_KEY + GateCommonEnums.InRecord.IN_HAZARDOUS_CHEMICAL_VEHICLES);
//                inHazardousChemicalVehicles++;
//            }
//        }
//
//        int randomNumberTwo = new Random().nextInt(100);
//        // 出园
//        if (randomNumberTwo >= 75 && randomNumberTwo <= 80 && outOrdinaryVehicle * 4 < inOrdinaryVehicle){//普通车辆
//            valueOperations.increment(ACCESS_REDIS_KEY + GateCommonEnums.OutRecord.OUT_ORDINARY_VEHICLE);
//        }
//        if (randomNumberTwo >= 80 && randomNumberTwo <= 85 && outPersonnel * 3.5 < inPersonnel){//人员
//            valueOperations.increment(ACCESS_REDIS_KEY + GateCommonEnums.OutRecord.OUT_PERSONNEL);
//        }
//        if (randomNumberTwo >= 85 && randomNumberTwo <= 95 && outHazardousChemicalVehicles * 3 < inHazardousChemicalVehicles){//危化车辆
//            valueOperations.increment(ACCESS_REDIS_KEY + GateCommonEnums.OutRecord.OUT_HAZARDOUS_CHEMICAL_VEHICLES);
//        }
//    }
//
//    /**
//     * @description: 定时任务生成报警数据
//     * @author: WangLong
//     * @date: 2024/4/8 16:27
//     */
//    @Scheduled(fixedDelay = 60000)
//    public void ProductionWarningData(){
//        if (new Random().nextInt(3) != 1){
//            return;
//        }
//        //烟雾、火灾基本没有
//        //违停、超速、不按轨道行驶最多
//        //其余较少
//        ValueOperations<String, Object> valueOperations = getValueOperations();
//        for (GateCommonEnums.Warning value : GateCommonEnums.Warning.values()) {
//            Object amount = valueOperations.get(WARNING_REDIS_KEY + value);
//            if (ObjectUtil.isNull(amount)){
//                valueOperations.set(WARNING_REDIS_KEY + value, 0);
//            }
//        }
//        int randomNumberOne = new Random().nextInt(9999);
//        int randomNumberTwo = new Random().nextInt(999);
//
//        //这三个可以同时增加
//        int randomNumberThree = new Random().nextInt(99);
//        int randomNumberFour = new Random().nextInt(99);
//        int randomNumberFive = new Random().nextInt(99);
//
//        //火灾
//        if (randomNumberOne == 789){
//            valueOperations.increment(WARNING_REDIS_KEY + GateCommonEnums.Warning.HUOZAI);
//        }
//        //烟雾
//        if (randomNumberOne == 1234){
//            valueOperations.increment(WARNING_REDIS_KEY + GateCommonEnums.Warning.YANWU);
//        }
//        //越界
//        if (randomNumberTwo >= 800 && randomNumberTwo <= 830){
//            valueOperations.increment(WARNING_REDIS_KEY + GateCommonEnums.Warning.YUEJIE);
//        }
//        //碰撞
//        if (randomNumberTwo >= 831 && randomNumberTwo <= 860){
//            valueOperations.increment(WARNING_REDIS_KEY + GateCommonEnums.Warning.PENGZHUANG);
//        }
//
//        //这三个可以同时增加
//        //违停
//        if (randomNumberThree >= 80){
//            valueOperations.increment(WARNING_REDIS_KEY + GateCommonEnums.Warning.WEITING);
//        }
//        //超速
//        if (randomNumberFour >= 70){
//            valueOperations.increment(WARNING_REDIS_KEY + GateCommonEnums.Warning.CHAOSU);
//        }
//        //不按轨道行驶
//        if (randomNumberFive >= 90 ){
//            valueOperations.increment(WARNING_REDIS_KEY + GateCommonEnums.Warning.BUANGUIDAOXINGSHI);
//        }
//
//    }
//
//
//    public ValueOperations<String, Object> getValueOperations(){
//        return redisTemplate.opsForValue();
//    }
//
//    /**
//     * 清空数据
//     */
//    @Scheduled(cron = "0 59 23 * * *")
//    public void refresh(){
//        ValueOperations<String, Object> valueOperations = getValueOperations();
//        //预约数据
//        for (GateCommonEnums.CheckStatus value : GateCommonEnums.CheckStatus.values()) {
//            valueOperations.set(APPOINTMENT_REDIS_KEY + value, 0);
//        }
//        //入园数据
//        for (GateCommonEnums.InRecord value : GateCommonEnums.InRecord.values()) {
//            valueOperations.set(ACCESS_REDIS_KEY + value, 0);
//        }
//
//        // 出园数据
//        for (GateCommonEnums.OutRecord value : GateCommonEnums.OutRecord.values()) {
//            valueOperations.set(ACCESS_REDIS_KEY + value, 0);
//        }
//
//        // 报警数据
//        for (GateCommonEnums.Warning value : GateCommonEnums.Warning.values()) {
//            valueOperations.set(WARNING_REDIS_KEY + value, 0);
//        }
//    }
//}
